package org.wm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.wm.entity.SysRole;

import java.util.List;

/**
 * 角色表 数据层
 * (已按照 Mybatis-Plus 混合模式进行改造)
 */
@Mapper
public interface SysRoleMapper extends BaseMapper<SysRole> {

    /**
     * 根据条件分页查询角色列表
     * @param page 分页对象
     * @param role 查询条件
     * @return 角色数据集合信息
     */
    IPage<SysRole> selectRoleList(Page<SysRole> page, @Param("role") SysRole role);

    /**
     * 根据用户ID查询角色权限
     * @param userId 用户ID
     * @return 角色列表
     */
    List<SysRole> selectRolePermissionByUserId(@Param("userId") Long userId);

    /**
     * 查询所有角色
     * @return 角色列表
     */
    List<SysRole> selectRoleAll();

    /**
     * 根据用户ID获取角色选择框列表
     * @param userId 用户ID
     * @return 选中角色ID列表
     */
    List<Long> selectRoleListByUserId(@Param("userId") Long userId);

    /**
     * 根据用户ID查询角色
     * @param userName 用户名
     * @return 角色列表
     */
    List<SysRole> selectRolesByUserName(@Param("userName") String userName);

    /*
        ================================================================================================
        ==== 以下方法已被删除，因为它们的功能已由 Mybatis-Plus 的 BaseMapper 或 Wrapper 提供： ====
        ================================================================================================
        - selectRoleById       -> 由 baseMapper.selectById(id) 或 service.getById(id) 实现
        - insertRole           -> 由 baseMapper.insert(role) 或 service.save(role) 实现
        - updateRole           -> 由 baseMapper.updateById(role) 或 service.updateById(role) 实现
        - deleteRoleById       -> 由 baseMapper.deleteById(id) (配合 @TableLogic) 实现
        - deleteRoleByIds      -> 由 baseMapper.deleteBatchIds(ids) (配合 @TableLogic) 实现
        - checkRoleNameUnique  -> 由 Wrapper 实现: wrapper.eq(SysRole::getRoleName, roleName)
        - checkRoleKeyUnique   -> 由 Wrapper 实现: wrapper.eq(SysRole::getRoleKey, roleKey)
    */
}